﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UtilZ.Dotnet.Ex.ZLog;

namespace UtilZ.Dotnet.Ex.Communication.Net.Ftp
{
    /// <summary>
    /// 为接收一个文件分配足够的磁盘空间
    /// Allocate sufficient disk space to receive a file.
    /// </summary>
    internal class FtpALLOCommand : FtpCommandAbs
    {
        /***********************************************************************************************************
        * [ALLO]（Allocate，分配）命令
        * 说明：发送文件前在服务器上分配X个字节
        * 
        * 用法:ALLO<NumberBytes[<MaxSize>]<CRLF>
        * 
        * 参数：NumberBytes是一个整数，代表为该文件保留的内存字节数（使用逻辑字节大小计算）。MaxSize是在使用记录或页数据结构时可选的最大记录或页大小。
        * 
        * 例子：
        * SendData "ALLO 3000 128"  + “/r/n
        * 
        * 注释：一些要保留足够内存以容纳将要传输的新文件的服务，会请求这条命令。对于用记录或页结构发送的文件来说，最大记录或页大小（以逻辑字节计）也 可能是必需的；它以这条命令的第二个参数字段中的十进制整数表示。这第二个参数是可选的，但在出现时应该与第一个参数三个ASCII字 符<SP>P<SP>分隔开。这条命令后跟一条STORe或APPEnd命令。那些不要求事先声明最大文件大小的服务器应该把 ALLO命令视为NOOP（不操作），而那些只关心最大记录或页大小的服务器应该受第一个参数的值，然后忽略它。
        * 
        * 返回值（粗体表示成功）：
        * 200  命令成功。
        * 202  命令还没有被实现，在此站点上是多余的。
        * 421  服务不可用，关闭控制连接。
        * 
        * 如果某项服务获知自己即将被关闭，会向所有命令做出这个应答。
        * 500  语法错误，无法识别命令。
        * 
        * 这其中包括命令行过长之类的错误
        * 501  参数或变元中有语法错误
        * 504  命令中还没有实现该参数
        * 530  无法登录。
        * 
        ************************************************************************************************************/


        public FtpALLOCommand()
            : base()
        {

        }


        protected override string[] GetNames()
        {
            return new string[] { FtpCommands.ALLO };
        }


        //protected override IFtpResponse PrimitiveExcute(FtpSession session, string commandLine)
        //{
        //    return FtpCodeResponse.NotImplementedCommandResponse;
        //}
    }

}
